package com.itlong.cloud.property.dao;


import com.itlong.cloud.POJO.PO.PropertyInfoPO;
import com.itlong.cloud.POJO.VO.property.PropertyLadderFeeVO;
import com.itlong.cloud.POJO.VO.property.PropertyProjectPropertyInfoVO;
import com.itlong.cloud.POJO.VO.property.PropertyRuleDetailVO;
import com.itlong.cloud.POJO.VO.property.PropertyRuleVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *     收费规则 数据访问接口
 * </desc>
 * @createDate 2017-10-13.
 */
@Mapper
@Repository
public interface IPropertyRuleDao extends IAbstractBaseDao<PropertyInfoPO>{

    /**
     * <desc>
     *      分页查询 收费规则列表
     * <desc/>
     *
     * @param params 查询参数
     * @return
     * @author Qiang.S
     * @createDate 2018-08-09
     */
    List<PropertyRuleVO> getRuleByPage(Map<String, Object> params);

    /**
     * <desc>
     *      根据收费类型查询收费规则
     * <desc/>
     *
     * @param projectId 项目编号
     * @param feeType 收费类型：1抄表费 2物业费 3维修费 4停车费
     * @param feeCycle 收费周期：1月 2季度 3年
     * @return MessageVO 标准格式化响应结果
     * @author Qiang.S
     * @createDate 2018/08/15
     */
    List<PropertyRuleVO> getRuleByFeeType(@Param("projectId")String projectId, @Param("feeType")String feeType, @Param("feeCycle")String feeCycle);

    /**
     * <desc>
     *      获取收费规则记录数
     * <desc/>
     *
     * @param params 查询参数
     * @return
     * @author Qiang.S
     * @createDate 2018-08-09
     */
    Integer getCount(Map<String, Object> params);

    /**
     * <desc>
     *      查询收费规则详情
     * <desc/>
     *
     * @param  feeRuleId  收费规则ID
     * @param  projectId  项目编号
     * @return
     * @author Qiang.S
     * @createDate 2018-08-09
     */
    PropertyRuleDetailVO getRuleDetail(@Param("feeRuleId")String feeRuleId, @Param("projectId")String projectId);

    /**
     * <desc>
     *      查询阶梯收费内容
     * <desc/>
     *
     * @param  feeRuleId  收费规则ID
     * @return
     * @author Qiang.S
     * @createDate 2018-08-09
     */
    List<PropertyLadderFeeVO> getLadderFee(String feeRuleId);

    /**
     * <desc>
     *     新增收费规则
     * <desc/>
     *
     * @param  params  收费规则信息
     * @return  MessageVO 标准格式化响应结果
     * @author Qiang.S
     * @createDate 2018/08/09
     */
    Integer saveRule(Map<String,Object> params);

    /**
     * <desc>
     *     判断规则名称是否重复
     * <desc/>
     *
     * @param  ruleName  收费规则名称
     * @param  projectId  项目编号
     * @param  feeRuleId  收费规则ID
     * @return  MessageVO 标准格式化响应结果
     * @author Qiang.S
     * @createDate 2018/10/24
     */
    Integer checkRuleNameRepeat(@Param("ruleName")String ruleName, @Param("projectId")String projectId, @Param("feeRuleId")String feeRuleId);

    /**
     * <desc>
     *      批量保存阶梯收费信息
     * </desc>
     *
     * @param params 阶梯收费信息信息
     * @return 受影响的行数
     * @author Qiang.S
     * @createDate 2018-08-09
     */
    Integer batchSaveLadderFeeInfo(List<Map<String, Object>> params);

    /**
     * <desc>
     *     更新收费规则
     * <desc/>
     *
     * @param  params  收费规则信息
     * @return  MessageVO 标准格式化响应结果
     * @author Qiang.S
     * @createDate 2018/08/09
     */
    Integer updateRule(Map<String,Object> params);

    /**
     * <desc>
     *      删除收费规则信息
     * <desc/>
     *
     * @param  feeRuleId  收费规则ID
     * @return
     * @author Qiang.S
     * @createDate 2018-08-09
     */
    Integer deleteRule(String feeRuleId);

    /**
     * <desc>
     *      删除阶梯收费信息
     * <desc/>
     *
     * @param  feeRuleId  收费规则ID
     * @return
     * @author Qiang.S
     * @createDate 2018-08-09
     */
    Integer deleteLadderFee(String feeRuleId);

    /**
     * <desc>
     *     查询收费规则是否被绑定
     * <desc/>
     *
     * @param  feeRuleId 收费规则ID
     * @return  MessageVO 标准格式化响应结果
     * @author Qiang.S
     * @createDate 2018/09/03
     */
    Integer deleteRuleCheck(String feeRuleId);

    /**
     * <desc>
     *     根据账单编号获取最小收费日
     * <desc/>
     *
     * @param  feeId 账单编号
     * @return  MessageVO 标准格式化响应结果
     * @author Qiang.S
     * @createDate 2018/10/25
     */
    String getMinFeeDay(String feeId);
}
